package rtda

import "hi-jvm/rtda/heap"

// 1. 线程
// 如果方法是Java方法，则PC寄存器存放当前正在执行的Java虚拟机指令的地址，
// 否则，当前方法是本地方法，pc寄存器中的值没有明确定义
type Thread struct {
		PC int		// PC寄存器（Program Counter）
		stack *Stack	// Java虚拟机栈
}

func NewThread() *Thread {
	return &Thread {
		stack: newStack(1024),
	}
}

func (self *Thread)PushFrame(frame *Frame) {
	self.stack.push(frame)
}

func (self *Thread)PopFrame() *Frame {
	return self.stack.pop()
}

func (self *Thread)CurrentFrame() *Frame {
	return self.stack.top()
}

func (self *Thread) NewFrame(method *heap.Method) *Frame {
	return NewFrame(self, method)
}

func (self *Thread) TopFrame() *Frame {
	return self.stack.top()
}

func (self *Thread)IsStackEmpty() bool {
	return self.stack.isEmpty()
}
